package com.huan.spring6.iocxml.life;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;
//BeanPostProcessor接口 实现bean实例化前后对bean进行自定义处理
/**
 * 在bean实例化前后进行自定义处理的功能：
 * 1. AOP，比如实现日志记录、权限检查、事务管理等
 * 2. 属性校验和修正
 * 3. 动态代理，可以增强对原始bean的控制和增强，如延迟加载、性能监控等
 * 4. 条件化的bean定义，可以根据某些特定条件动态决定是否实例化某个bean
 */
public class MyBeanPost implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean,
                                                  String beanName) throws BeansException {
        System.out.println("3 bean后置处理器，初始化之前执行");
        System.out.println(beanName+"::"+bean);
        return bean;
    }
    @Nullable
    public Object postProcessAfterInitialization(Object bean,
                                                 String beanName) throws BeansException {
        System.out.println("5 bean后置处理器，初始化之后执行");
        System.out.println(beanName+"::"+bean);
        return bean;
    }
}
